home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #3 / Amiga Plus CD - 2002 - No. 03.iso / AmiSoft / Util / Misc / Lottery2002.lha / Lottery2002 / Source / handelgads.c < prev    next >
C/C++ Source or Header  |  2002-03-10  |  4KB  |  199 lines

  1. /* handlegads.c */
  2.  
  3. #include "includes.h"
  4. #include "externals.h"
  5.  
  6. BOOL handlegads(struct Window *win, struct Gadget *gads[], UWORD code, UWORD gad)
  7. {
  8.     switch(gad)
  9.     {
  10.         case GAD_START:
  11.             get_num(win, gads);
  12.         break;
  13.  
  14.         case GAD_SPEAK:
  15.             putbusy(win);
  16.             if(speaknums(wednums, 0))
  17.                 speaknums(satnums, 1);
  18.             clearbusy(win);
  19.         break;
  20.  
  21.         case GAD_QUIT:
  22.             return(TRUE);
  23.         break;
  24.     }
  25.     return(FALSE);
  26. }
  27.  
  28. /* Generate the random numbers, sort them & print them */
  29. void get_num(struct Window *win, struct Gadget *gads[])
  30. {
  31.     int numpos = 0;
  32.     int cn1, cn2, wednum, satnum, box = 0;
  33.     LONG fuel_level = 1;
  34.     BOOL flag;
  35.  
  36.     putbusy(win);
  37.  
  38.     for(cn1 = 0; cn1 < 6; cn1++)
  39.     {
  40.         wednums[cn1] = 0;
  41.         satnums[cn1] = 0;
  42.     }
  43.  
  44.     do
  45.     {
  46.         cn2 = 40;
  47.         do
  48.         {
  49.             flag = FALSE;
  50.             for(cn1 = 0; cn1 < cn2; cn1++)
  51.             {
  52.                 wednum = (rand() % 49 + 1);
  53.                 srand(seed += wednum);
  54.                 satnum = (rand() % 49 + 1);
  55.                 printnums(win, gads, wednum, satnum, box);
  56.                 SetGadgetAttrs(gads[GAD_FUEL], win, NULL,
  57.                     FUELGAUGE_Level, fuel_level++,
  58.                     TAG_DONE);
  59.             }
  60.             for(cn1 = 0; cn1 < 6; cn1++)
  61.             {
  62.                 if((wednum == wednums[cn1]) || (satnum == satnums[cn1]))
  63.                     flag = TRUE;
  64.             }
  65.             if(flag)
  66.                 cn2 = 1;
  67.         }while(flag);
  68.  
  69.  
  70.         wednums[numpos] = wednum; satnums[numpos] = satnum;
  71.         ++box;
  72.         ++numpos
  73.     }while(numpos < 6);
  74.  
  75.     sortnums(wednums);
  76.     sortnums(satnums);
  77.  
  78.     for(cn1 = 0; cn1 < 6; cn1++)
  79.     {
  80.         printnums(win, gads, wednums[cn1], satnums[cn1], cn1);
  81.     }
  82.  
  83.     clearbusy(win);
  84. }
  85.  
  86. /* Sort numbers */
  87. void sortnums(int nums[])
  88. {
  89.     int a, b, cn1;
  90.     BOOL flag;
  91.  
  92.     do
  93.     {
  94.         flag = FALSE;
  95.         for(cn1 = 0; cn1 < 5; cn1++)
  96.         {
  97.             a = nums[cn1];
  98.             b = nums[cn1 + 1];
  99.             if(a > b)
  100.             {
  101.                 nums[cn1] = b;
  102.                 nums[cn1 + 1] = a;
  103.                 flag = TRUE;
  104.             }
  105.         }
  106.     }while(flag);
  107. }
  108.  
  109. /* Print numbers in the LOTTO_Box gadgets */
  110. void printnums(struct Window *win, struct Gadget *gads[], int wed, int sat, int gad)
  111. {
  112.     SetGadgetAttrs(gads[gad + 1], win, NULL,
  113.                 BUTTON_Integer, wed,
  114.                 TAG_DONE);
  115.  
  116.     SetGadgetAttrs(gads[gad + 7], win, NULL,
  117.                 BUTTON_Integer, sat,
  118.                 TAG_DONE);
  119.     Delay(1);
  120. }
  121.  
  122.  
  123. BOOL speaknums(int nums[], BYTE day)
  124. {
  125.     char num0_9[]      = " 123456789";
  126.     char *num10_15[] = {"ten", "e llev en", "twelve","thir", "four", "fif"};
  127.     char *days[]     = {"wedensdays", "saturdays"};
  128.     char numbuf[30];
  129.     int  num, count;
  130.     BOOL flag = TRUE;
  131.  
  132.     if(speakMP = CreateMsgPort())
  133.     {
  134.         if(speakIO = CreateIORequest(speakMP, sizeof(struct narrator_rb)))
  135.         {
  136.             if(OpenDevice("narrator.device", 0, (struct IORequest *)speakIO, 0L))
  137.                 flag = requester(g_title,
  138.                                     "Could not open narrator.device", g_okbutton);
  139.             else
  140.             {
  141.                 sprintf(numbuf, " %s numbers are", days[day]);
  142.                 speak(numbuf);
  143.  
  144.                 for(count = 0; count < 6; count++)
  145.                 {
  146.                     num = nums[count];
  147.                     if(num < 10)
  148.                         sprintf(numbuf, "%c", num0_9[num]);
  149.                     if(num > 9 && num < 13)
  150.                         strcpy(numbuf, num10_15[num - 10]);
  151.                     if(num > 12 && num < 16)
  152.                         sprintf(numbuf, "%s teen", num10_15[num - 10]);
  153.                     if(num > 15 && num < 20)
  154.                         sprintf(numbuf, "%c teen", num0_9[num - 10]);
  155.                     if(num > 19 && num < 30)
  156.                         sprintf(numbuf, "twenty %c", num0_9[num - 20]);
  157.                     if(num > 29 && num < 40)
  158.                         sprintf(numbuf, "thirty  %c", num0_9[num - 30]);
  159.                     if(num > 39 && num < 50)
  160.                         sprintf(numbuf, "forty %c", num0_9[num - 40]);
  161.  
  162.                     speak(numbuf);
  163.                 }
  164.             if(day)
  165.                 speak("GOOD LUCK");
  166.  
  167.             CloseDevice((struct IORequest *)speakIO);
  168.             }
  169.         DeleteIORequest(speakIO);
  170.         }
  171.         else
  172.             flag = requester(g_title,
  173.                                  "Could not create IO request", g_okbutton);
  174.       DeleteMsgPort(speakMP);
  175.       }
  176.     else
  177.         flag = requester(g_title,
  178.                                  "Could not create message port", g_okbutton);
  179.       return(flag);
  180. }
  181.  
  182.  
  183. void speak(char *text)
  184. {
  185.     BYTE  speak_chan[4] = {3, 5, 10, 12};
  186.     UBYTE phontext[128];
  187.  
  188.     Translate(text, strlen(text), &phontext[0], 128);
  189.  
  190.     speakIO->ch_masks = &speak_chan[0];
  191.     speakIO->nm_masks = sizeof(speak_chan);
  192.     speakIO->message.io_Command = CMD_WRITE;
  193.     speakIO->message.io_Data    = phontext;
  194.     speakIO->message.io_Length  = strlen(&phontext[0]);
  195.  
  196.     DoIO((struct IORequest *)speakIO);
  197.     Delay(5);
  198. }
  199.